#ifndef _MY_HOT_
#define _MY_HOT_
#include"data.hpp"
#include<unistd.h>
extern cloud::DataManager * data;
namespace cloud{
    class HotManager{
        private:
            std::string _back_dir;
            std::string _pack_dir;
            std::string _pack_suffix;
            int _hot_time;
        private:
            bool HotJudge(const std::string &filename){//非热点返回真，热点返回假
                FileUtil fu(filename);
                time_t last_time = fu.LastATime();
                time_t cur_time = time(NULL);
                if(cur_time - last_time >_hot_time){
                    return true;
                }
                return false;
            }
        public:
        HotManager(){
            Config * config = Config::GetInstance();
            _back_dir = config->GetBackDir();
            _pack_dir =config->GetPackDir();
            _pack_suffix = config->GetPackFileSuffix();
            _hot_time = config->GetHotTime();
            FileUtil tmp1(_back_dir);
            FileUtil tmp2(_pack_dir);
            //创建目录，防止异常
            tmp1.CreateDirectory();
            tmp2.CreateDirectory();
        }
        bool RunModule(){
            while(1){
            //1.遍历备份目录
            FileUtil fu(_back_dir);
            std::vector<std::string> arry;
            fu.ScanDirectory(&arry);//浏览目录，获取该目录下所有文件名

            //2.遍历判断文件是否为非热点文件
            for(auto &a : arry){
                if(HotJudge(a) == false){
                    continue;//热点文件不处理
                }
                //3.获取文件备份信息
                BackupInfo bi;
                if(data->GetOneByRealPath(a , &bi) == false){
                    //说明当前文件存在，但是没有备份信息
                    bi.NewBackupInfo(a);//创建一个文件a的备份信息
                }
                //4.对非热点文件进行压缩处理
                FileUtil tmp(a);
                tmp.Compress(bi.pack_path);
                
                //4.删除源文件，修改备份信息
                remove(a.c_str());
                bi.pack_flag = true;
                data->Update(bi);
            }
            usleep(1000);//避免消耗cpu资源过高
            }
            return true;
        }
    };


}

#endif